package com.sakiko.ioc_07;

// FactoryBean工厂组件使用
public class UserService {
    private String name;
    private int age;

    // 覆盖了无参构造，不能直接在 ioc容器中加入 bean标签。 属于复杂对象之一
    public UserService(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserService{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

/*
1、理解 FactoryBean:
    a: FactoryBean 工厂组件 -> 组件
    b: FactoryBean 是 spring核心容器对外的一个约定和规范
    c: 只需要我们将对象的创建过程添加到 getObject方法中，
     核心容器就会自动将 getObject()方法执行，并且将返回的对象加入到 ioc容器中
    d: FactoryBean 用于制造复杂对象都需要使用
    e: FactoryBean 也是 spring整合其他框架最核心组件
2、使用步骤:
    a: 创建一个类实现 FactoryBean接口
    b: 重写和完善 getObject()方法 [封装自己创建对象的流程]
    c: 将 FactoryBean类配置到 ioc容器 <bean
3、如何向内部传入参数
    a: <bean 标签依然声明 XxxFactoryBean
    b: 需要在 factoryBean中声明属性以及 setXxx()方法接收数据
    c: 在 getObject()方法中写赋值逻辑
4、对比 BeanFactory
    a: BeanFactory 核心容器，用于组件管理
    b: FactoryBean 工厂组件，将复杂对象加入到 ioc容器
 */